import { MainSearchTableProps } from '../../MainSearchTable/interface';

/**
 *
 * @param type 行内容是单选还是多选
 * @param changeType 不同tab下的行选中切换方式
 */
export function getRowSelection(
  type: '单选' | '多选' = '多选',
  // 如果没有主动设置覆盖类型，单选默认以覆盖方式进行添加
): MainSearchTableProps['getRowSelection'] {
  return function (value, valueSet, dataSource) {
    return {
      type: type === '单选' ? 'radio' : 'checkbox',
      onChange(selectedRowKeys, selectedRows, info) {
        if (info.type === 'all') {
          const selectAbleDataSource = dataSource.filter((v) => !v.isFolder);
          const anyId = dataSource.find((v) => !v.isFolder)?.id;
          if (anyId) {
            if (selectedRowKeys.includes(anyId)) {
              // 全部选中
              selectAbleDataSource.forEach((v) => {
                valueSet?.set(v.id, v);
              });
              console.log('全部选中了');
            } else {
              // 全部取消
              selectAbleDataSource.forEach((v) => {
                valueSet?.remove(v.id);
                console.log('全部取消了');
              });
            }
          }
        }
      },
      onSelect(source, selected) {
        console.log(source, selected);
        if (type === '单选') {
          value?.clear();
          valueSet?.set(source.id, source);
        } else {
          if (selected) {
            valueSet?.set(source.id, source);
          } else {
            valueSet?.remove(source.id);
          }
        }
      },
      selectedRowKeys: value ? [...value.keys()] : undefined,
    };
  };
}
